Amazon Bedrock の新機能 プロンプト最適化がプレビュー利用可能になりました
こんにちは、森田です。
以下のアップデートで Amazon Bedrock のプロンプト最適化がプレビューリリースされました。
プロンプト最適化
今回発表された機能は、ユーザが LLM へ入力するプロンプトを最適化してくれる機能です。
プロンプトは、LLM に対しての指示文となっており、このプロンプトの書き方によって、LLMの出力精度が変化します。
「プロンプトの書き方」はLLMを利用する際の重要なファクターとなっており、プロンプトエンジニアリング
といった新しい学問も確立されています。
そのため、プロンプトエンジニアリング
を学んでいなければ、最適なプロンプトの作成が難しかったのですが、
この機能を使えば、簡単により最適なプロンプトを作成することが可能となります。
プレビュー利用可能なリージョン
東京リージョンでは利用できません。
以下のリージョンで利用可能です。
- us-east-1
- us-west-2
- ap-south-1
- ap-southeast-2
- ca-central-1
- eu-central-1
- eu-west-1
- eu-west-2
- eu-west-3
- sa-east-1
利用可能なモデル
すべてのモデルで利用可能ではなく、一部モデルのみ対応しています。
- Amazon Titan Text G1 - Premier
- Anthropic Claude 3 Haiku
- Anthropic Claude 3 Opus
- Anthropic Claude 3 Sonnet
- Anthropic Claude 3.5 Sonnet
- Meta Llama 3 70B Instruct
- Meta Llama 3.1 70B Instruct
- Mistral AI Mistral Large (24.02)
やってみた
マネジメントコンソール
Playground
まずは、Playground上で動作を確認してみます。
モデルの選択後(Claude3.5 Sonnet)、プロンプトを入力し、プロンプト入力フォームのアイコンをクリックします。
すると、以下のようにプロンプト最適化が開始されます。
プロンプト最適化が完了すると、以下のように最適化したプロンプトを提案してくれます。(提案完了まで数十秒ほどかかります)
元のプロンプト
プロンプトエンジニアリングについて教えて
最適化されたプロンプト
<task>
プロンプトエンジニアリングについて説明する
</task>
<instruction>
プロンプトエンジニアリングとは、大規模言語モデル(LLM)に与えるプロンプトを最適化することで、LLMの出力を改善する手法のことです。以下の点に留意して、プロンプトエンジニアリングについて簡潔に説明してください:
- プロンプトエンジニアリングの目的と重要性
- プロンプトを最適化する際の一般的な手法
- プロンプトエンジニアリングの具体的な利点
- プロンプトエンジニアリングの課題や制限事項(あれば)
出力は<response>と</response>タグで囲んでください。
</instruction>
<response>
プロンプトエンジニアリングは、LLMに与えるプロンプトを工夫・最適化することで、LLMの出力を改善する手法です。目的は、LLMに適切な指示を与え、より正確で有用な出力を得ることです。
一般的な手法としては、プロンプトの構造化、明確な指示の提示、適切な例示の追加などがあります。プロンプトを丁寧に設計することで、LLMの出力の質が向上し、タスクに対する有用性が高まります。
プロンプトエンジニアリングの利点は、LLMの能力を最大限に引き出せること、特定のタスクに特化した出力が得られることなどです。一方で、プロンプトの設計が難しい場合があり、試行錯誤を要する点が課題と言えます。
</response>
Prompt management
先日GAされた Prompt management 上でも利用できるようです。
以下のように「Optimize」のボタンが追加されています。
プロンプト最適化後でも、最適化前に使用していた変数が含まれています。
また、LLMからより正確な回答が得られるように変数も増えています。
APIから実行
APIから実行しても時間要するため、レスポンスはstreamとなります。
Pythonから実行
import boto3
# Set values here
TARGET_MODEL_ID = "anthropic.claude-3-sonnet-20240229-v1:0"
PROMPT = "プロンプトエンジニアリングについて教えて"
def get_input(prompt):
return {
"textPrompt": {
"text": prompt
}
}
def handle_response_stream(response):
try:
event_stream = response['optimizedPrompt']
for event in event_stream:
if 'optimizedPromptEvent' in event:
print("========================== OPTIMIZED PROMPT ======================\n")
optimized_prompt = event['optimizedPromptEvent']
print(optimized_prompt)
else:
print("========================= ANALYZE PROMPT =======================\n")
analyze_prompt = event['analyzePromptEvent']
print(analyze_prompt)
except Exception as e:
raise e
if __name__ == '__main__':
client = boto3.client('bedrock-agent-runtime', region_name="us-west-2")
try:
response = client.optimize_prompt(
input=get_input(PROMPT),
targetModelId=TARGET_MODEL_ID
)
print("Request ID:", response.get("ResponseMetadata").get("RequestId"))
print("========================== INPUT PROMPT ======================\n")
print(PROMPT)
handle_response_stream(response)
except Exception as e:
raise e
実行結果
========================== INPUT PROMPT ======================
プロンプトエンジニアリングについて教えて
========================= ANALYZE PROMPT =======================
{'message': 'Analysis of your prompt is complete'}
========================== OPTIMIZED PROMPT ======================
{'optimizedPrompt': {'textPrompt': {'text': '"<task>\\n\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306b\\u3064\\u3044\\u3066\\u8aac\\u660e\\u3059\\u308b\\n</task>\\n\\n<instruction>\\n\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u3068\\u306f\\u3001\\u5927\\u898f\\u6a21\\u8a00\\u8a9e\\u30e2\\u30c7\\u30eb(LLM)\\u306b\\u4e0e\\u3048\\u308b\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8(\\u5165\\u529b\\u30c6\\u30ad\\u30b9\\u30c8)\\u3092\\u6700\\u9069\\u5316\\u3059\\u308b\\u3053\\u3068\\u3067\\u3001\\u30e2\\u30c7\\u30eb\\u306e\\u51fa\\u529b\\u3092\\u6539\\u5584\\u3059\\u308b\\u624b\\u6cd5\\u306e\\u3053\\u3068\\u3067\\u3059\\u3002\\u4ee5\\u4e0b\\u306e\\u70b9\\u306b\\u7559\\u610f\\u3057\\u3066\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306b\\u3064\\u3044\\u3066\\u7c21\\u6f54\\u306b\\u8aac\\u660e\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044:\\n\\n- \\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306e\\u76ee\\u7684\\u3068\\u91cd\\u8981\\u6027\\n- \\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u3092\\u6700\\u9069\\u5316\\u3059\\u308b\\u969b\\u306e\\u4e00\\u822c\\u7684\\u306a\\u624b\\u6cd5\\n- \\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306e\\u5177\\u4f53\\u7684\\u306a\\u5229\\u70b9\\n- \\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306e\\u8ab2\\u984c\\u3084\\u5236\\u9650\\u4e8b\\u9805\\n\\n\\u3042\\u306a\\u305f\\u306e\\u56de\\u7b54\\u306f<response>\\u3068</response>\\u306e\\u30bf\\u30b0\\u3067\\u56f2\\u3093\\u3067\\u304f\\u3060\\u3055\\u3044\\u3002\\n</instruction>\\n\\n<response>\\n\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306e\\u76ee\\u7684\\u306f\\u3001LLM\\u306b\\u4e0e\\u3048\\u308b\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u3092\\u6539\\u5584\\u3059\\u308b\\u3053\\u3068\\u3067\\u3001\\u30e2\\u30c7\\u30eb\\u306e\\u51fa\\u529b\\u3092\\u6700\\u9069\\u5316\\u3057\\u3001\\u3088\\u308a\\u6b63\\u78ba\\u3067\\u6709\\u7528\\u306a\\u7d50\\u679c\\u3092\\u5f97\\u308b\\u3053\\u3068\\u3067\\u3059\\u3002\\u3053\\u308c\\u306f\\u3001LLM\\u306e\\u6027\\u80fd\\u3092\\u6700\\u5927\\u9650\\u306b\\u5f15\\u304d\\u51fa\\u3059\\u305f\\u3081\\u306b\\u975e\\u5e38\\u306b\\u91cd\\u8981\\u306a\\u624b\\u6cd5\\u3067\\u3059\\u3002\\n\\n\\u4e00\\u822c\\u7684\\u306a\\u624b\\u6cd5\\u3068\\u3057\\u3066\\u306f\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u306e\\u69cb\\u9020\\u5316\\u3001\\u660e\\u78ba\\u306a\\u6307\\u793a\\u306e\\u63d0\\u793a\\u3001\\u9069\\u5207\\u306a\\u6587\\u8108\\u306e\\u63d0\\u4f9b\\u3001\\u4f8b\\u793a\\u306e\\u6d3b\\u7528\\u306a\\u3069\\u304c\\u3042\\u308a\\u307e\\u3059\\u3002\\u307e\\u305f\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u306e\\u9577\\u3055\\u3084\\u8a00\\u8a9e\\u7684\\u306a\\u8868\\u73fe\\u3092\\u8abf\\u6574\\u3059\\u308b\\u3053\\u3068\\u3082\\u6709\\u52b9\\u3067\\u3059\\u3002\\n\\n\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306e\\u5229\\u70b9\\u306f\\u3001LLM\\u306e\\u51fa\\u529b\\u306e\\u8cea\\u3092\\u5411\\u4e0a\\u3055\\u305b\\u3001\\u7279\\u5b9a\\u306e\\u30bf\\u30b9\\u30af\\u306b\\u7279\\u5316\\u3057\\u305f\\u7d50\\u679c\\u3092\\u5f97\\u3089\\u308c\\u308b\\u3053\\u3068\\u3067\\u3059\\u3002\\u307e\\u305f\\u3001\\u30e2\\u30c7\\u30eb\\u306e\\u8aa4\\u308a\\u3084\\u504f\\u308a\\u3092\\u8efd\\u6e1b\\u3057\\u3001\\u3088\\u308a\\u516c\\u5e73\\u3067\\u502b\\u7406\\u7684\\u306a\\u51fa\\u529b\\u3092\\u5b9f\\u73fe\\u3067\\u304d\\u307e\\u3059\\u3002\\n\\n\\u4e00\\u65b9\\u3067\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u30ea\\u30f3\\u30b0\\u306b\\u306f\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u4f5c\\u6210\\u306e\\u624b\\u9593\\u3084\\u3001\\u30e2\\u30c7\\u30eb\\u306e\\u5185\\u90e8\\u52d5\\u4f5c\\u3092\\u5b8c\\u5168\\u306b\\u5236\\u5fa1\\u3067\\u304d\\u306a\\u3044\\u3068\\u3044\\u3046\\u8ab2\\u984c\\u3082\\u3042\\u308a\\u307e\\u3059\\u3002\\u307e\\u305f\\u3001\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\\u306e\\u6700\\u9069\\u5316\\u306b\\u306f\\u8a66\\u884c\\u932f\\u8aa4\\u304c\\u5fc5\\u8981\\u3067\\u3001\\u6642\\u9593\\u3068\\u30b3\\u30b9\\u30c8\\u304c\\u304b\\u304b\\u308b\\u53ef\\u80fd\\u6027\\u304c\\u3042\\u308a\\u307e\\u3059\\u3002\\n</response>"'}}}
さいごに
Amazon Bedrock で生成AI活用のハードルを下げる非常に便利なアップデートでした。
プロンプト最適化に時間を要していることから、最適化処理でもLLMが利用されていそうな気がしています。
現在は、プレビュー公開のため利用制限がありますが、今後のGAが非常に楽しみです。